

package com.l2qq.admin.login;

import cn.dev33.satoken.stp.StpUtil;
import com.jfinal.aop.Inject;
import com.jfinal.kit.HashKit;
import com.jfinal.kit.Ret;
import com.jfinal.kit.StrKit;

import com.l2qq.common.model.Account;

/**
 * 登录业务层
 */
public class LoginService {

    @Inject
    Account accountDao;

    /**
     * 登录
     */
    public Ret login(String userName, String password, String ip, int port) {
        if (StrKit.isBlank(userName)) {
            return Ret.fail("用户名不能为空");
        }
        if (StrKit.isBlank(password)) {
            return Ret.fail("密码不能为空");
        }

        Ret ret = doLogin(userName, password);
        return ret;
    }

    /**
     * 登录逻辑
     */
    private Ret doLogin(String userName, String passWord) {
        userName = userName.toLowerCase().trim();
        passWord = passWord.trim();
        Account account = accountDao.findFirst("select id,realname,username,password,salt,is_active,avatar from account where username=? limit 1", userName);
        if (account == null) {
            return Ret.fail("用户名不存在");
        }
        if (!account.getIsActive()) {
            return Ret.fail("账号未激活，请先激活账号");
        }


        String salt = account.getSalt();
        String hashedPass = HashKit.sha256(salt + passWord);

        // 未通过密码验证
        if (!account.getPassword().equals(hashedPass)) {
            return Ret.fail("密码不正确");
        }
        // 移除敏感信息 password、salt
        account.removeSensitiveInfo();
        // Sa-Token 登录（核心）
        StpUtil.login(account.getId());

        // 返回 token 给前端
        account.put("accessToken", StpUtil.getTokenValue());
        account.put("homePath", "/analytics");
        //System.out.println("StpUtil.getTokenSession()：" + StpUtil.getTokenSession());
        // 存储账户信息到 Token Session
        StpUtil.getTokenSession().set("loginAccount", account);
        return Ret.ok("data", account);   // 用于设置 cookie 的存活时间
    }
}
